Skip to content

Conversation

@tzanko-matev
Copy link
Contributor

@tzanko-matev tzanko-matev commented Oct 26, 2025

Before we used to only handle PY_START, PY_RETURN and LINE events. This lead to an unbalanced call stack in the trace, because we didn't handle exceptions, generators and coroutines properly. We do now. Here's the CHANGELOG entry:

  • Balanced call-stack handling for generators, coroutines, and unwinding frames by subscribing to PY_YIELD, PY_UNWIND, PY_RESUME, and PY_THROW, mapping resume/throw events to TraceWriter::register_call, yield/unwind to register_return, and capturing PY_THROW arguments as exception using the existing value encoder. Added Python + Rust integration tests that drive .send()/.throw() on coroutines and generators to guarantee the trace stays balanced and that exception payloads are recorded.

design-docs/balanced-call-stack-events-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/src/runtime/tracer/events.rs: 
codetracer-python-recorder/src/runtime/value_capture.rs: 
codetracer-python-recorder/tests/python/test_monitoring_events.py: 
design-docs/balanced-call-stack-events-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/src/runtime/activation.rs: 
codetracer-python-recorder/src/runtime/tracer/events.rs: 
design-docs/balanced-call-stack-events-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/src/runtime/tracer/events.rs: 
codetracer-python-recorder/src/runtime/tracer/runtime_tracer.rs: 
codetracer-python-recorder/tests/python/test_monitoring_events.py: 
design-docs/balanced-call-stack-events-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/tests/python/test_monitoring_events.py: 
codetracer-python-recorder/tests/rust/print_tracer.rs: 
design-docs/balanced-call-stack-events-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
…py_unwind, py_resume, py_throw

Signed-off-by: Tzanko Matev <[email protected]>
@github-actions
Copy link

Coverage Summary

Rust (lines)
80.1% covered (7,390 / 9,228 | 1,838 missed)

File Lines Miss Cover
codetracer-python-recorder/src/logging/logger.rs 273 64 76.6%
codetracer-python-recorder/src/monitoring/api.rs 162 149 8.0%
codetracer-python-recorder/src/monitoring/callbacks.rs 589 68 88.5%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/tracer/events.rs 439 250 43.1%
codetracer-python-recorder/src/runtime/tracer/filtering.rs 128 32 75.0%
codetracer-python-recorder/src/runtime/tracer/io.rs 162 31 80.9%
codetracer-python-recorder/src/runtime/tracer/lifecycle.rs 231 46 80.1%
codetracer-python-recorder/src/runtime/tracer/runtime_tracer.rs 1,619 53 96.7%
codetracer-python-recorder/src/runtime/value_capture.rs 260 132 49.2%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap/filesystem.rs 90 32 64.4%
codetracer-python-recorder/src/trace_filter/engine.rs 529 68 87.1%
codetracer-python-recorder/src/trace_filter/loader.rs 435 196 54.9%
codetracer-python-recorder/src/trace_filter/selector.rs 258 66 74.4%
Showing top 20 entries by missed lines (of 52 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

@tzanko-matev
Copy link
Contributor Author

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@tzanko-matev tzanko-matev merged commit 8570ee0 into main Oct 28, 2025
3 checks passed
@tzanko-matev tzanko-matev deleted the extend-handled-events branch October 28, 2025 09:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants